import jdk.nashorn.internal.ir.ContinueNode;

import java.util.Scanner;

/**
 * @Author  2022
 * @Date 2022/4/18  8:27
 * @Description:   3
 */
public class TestWei {
    /**
     * 根据输入的年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
     * @param args  年龄
     */
    public static void main(String[] args) {
        System.out.println("请输入要判断的年龄的年龄");
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextDouble()) {
            double age = scanner.nextDouble();
            while (true) {
                if (age < 0) {
                    System.out.println("输入错误，请重新输入");
                    continue;
                } else if (0 <= age && age <= 18) {
                    System.out.println("少年");
                    break;
                } else if (age <= 28) {
                    System.out.println("青年");
                    break;
                } else if (age <= 55) {
                    System.out.println("中年");
                    break;
                } else {
                    System.out.println("老年");
                    break;
                }
            }
        }
    }

    /**
     * 模拟三次密码输入的场景。 最多能输入三次密码，密码正确，提示“登录成功”,密码错误， 可以重新输 入，最多输入三次。三次均错，则提示退出程序
     */
    public static void login(){
        int count = 3;
        Scanner scanner = new Scanner(System.in);
        while (count != 0){
            System.out.println("请输入你的密码：");
            String passward = scanner.nextLine();
            if (passward.equals("110")){
                System.out.println("登陆成功");
                return;
            }else {
                count--;
                System.out.println("你还有" + count +"次机会");
            }
        }
    }

    public static void main8(String[] args) {
        login();
    }

    /**
     * 判断一个数二进制1的个数
     * @param n
     * @return
     */
    public static int func4(int n){
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if ((((n >>i)&1) !=0)){
                count++;
            }
        }
        return count;
    }

    public static int func5(int n){
        int count = 0;
        while (n !=0){
            if ((n&1) != 0){
                count++;
            }
            n = n>>>1;
        }
        return count;
    }

    public static int func6(int n){
        int count = 0;
        while (n !=0){
            count++;
            n =n&(n-1);
        }
        return count;
    }

    /**
     * 判断某个数字是不是2^k
     * @param n
     * @return
     */
    public static boolean func7(int n){
        if((n&(n-1))==0){
            return true;
        }
        return false;
    }



    /**
     * 获取一个数二进制序列中所有偶数位和奇数位
     * @param n  分别输出二进制数列
     */
    public static void func9(int n) {
        for (int i = 31; i >=1; i-=2) {
            System.out.print(((n >> i) & 1) + "");
        }
        System.out.println();
        for (int i = 30; i >= 0; i-=2) {
            System.out.print(((n >> i) & 1) + "");
        }
    }

    public static void main7(String[] args) {
        func9(8);
        //func9(7);
        //System.out.println(func7(8));
        /*System.out.println(func6(7));
        System.out.println(func6(3));
        System.out.println(func6(1024));*/
    }




    /**
     * 求水仙花数
     */

    public static void func3(){
        for (int num = 0; num < 999; num++) {
            //求这个数是几位数
            int count = 0;//计数器
            int tem = num;
            while (tem!=0){
                count++;
                tem /=10;
            }
            //已经求得这个数是几位数
            //但是 tem==0了
            tem = num;
            int sum = 0;
            //求这个数字的每一位是几，并且把每一位的次幂加起来与num比较
            while (tem != 0){
                sum += Math.pow(tem % 10, count);
                tem /=10;
            }
            if (sum == num){
                System.out.println(num);
            }
        }
    }

    public static void main6(String[] args) {
        func3();
    }


    /**
     * 求两个数最大公约数
     * @param a  被除数
     * @param b  除数
     * @return   完成
     */
    public static int func2(int a,int b){
        int c = a % b;
        while (c!=0){
            a = b;
            b = c;
            c = a%b;
        }
        return b;
    }

    public static void main5(String[] args) {
        System.out.println(func2(996, 24));
    }



    /**
     * 乘法口诀表
     */
    public static void func(){
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i +"=" + j*i +" ");
            }
            System.out.println();
        }
    }

    public static void main4(String[] args) {
        func();
    }





    /**
     * 判断某一年是不是闰年
     * @param year
     * @return  是闰年返回true 不是闰年返回false
     */
    public static boolean isLeapyear(int year){
        if (year % 100 != 0 && year % 4 == 0 || year % 400 == 0){
            return true;
        }
        return false;
    }

    public static void main3(String[] args) {
        for (int year = 1000; year <= 2000; year++) {
            if (isLeapyear(year)){
                System.out.println(year);
            }
        }
    }




    /**
     * 判断素数
     * @param num
     * @return  是素数返回true  不是素数返回false
     */
    //给定一个数字，判定一个数字是否是素数
    public static boolean isPrime1(int num){
        for (int i = 2; i < num; i++) {
            if (num % i != 0) {
                //System.out.println("是素数！");
                return true;
            }
        }
        //System.out.println("不是素数");
        return false;
    }



    public static boolean isPrime2(int num){
        for (int i = 2; i <= num/2; i++) {
            if (num % i != 0) {
                System.out.println("是素数！");
                return true;
            }
        }
        System.out.println("不是素数");
        return false;
    }


    public static boolean isPrime(int num){
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                //System.out.println("是素数！");
                return false;
            }
        }
        //System.out.println("不是素数");
        return true;
    }

    public static void main2(String[] args) {
        for (int i = 2; i <= 100; i++) {
            if (isPrime(i)){
                System.out.println(i);
            }
        }
    }

    public static void main1(String[] args) {
        boolean ret = isPrime(17);
        System.out.println(ret);
//        if (isPrime(17)){
//            System.out.println("是素数！");
//        }else{
//            System.out.println("不是素数！");
//        }
    }
}
